package util;

import java.util.HashSet;
import java.util.Set;
import java.util.regex.Pattern;

/**
 * The Util class keeps common constants and methods used into the info.kweaver package.
 * 
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: Stela Institute</p>
 * @version 1.0
 */
public class Util {
	
	/**
	 * The ' character.
	 */
	public static final String ACCENT_CHARACTER_1 = "'";

	/**
	 * The ´ character.
	 */
	public static final String ACCENT_CHARACTER_2 = "´";

	/**
	 * The space character.
	 */
	public static final String BLANK_SPACE = " ";

	/**
	 * Default encoding UTF-8.
	 */
	public static final String DEFAULT_ENCODING = "UTF-8";

	/**
	 * Hex representation for accented characters.
	 */
	public static final String HEX_REPRESENTATION = "\u00e1\u00e9\u00ed\u00f3\u00fa\u00e0\u00e8\u00ec\u00f2\u00f9\u00e2\u00ea"
			+ "\u00ee\u00f4\u00fb\u00e4\u00eb\u00ef\u00f6\u00fc\u00e3\u00f5\u00e7\u00c1"
			+ "\u00c9\u00cd\u00d3\u00da\u00c0\u00c8\u00cc\u00d2\u00d9\u00c2\u00ca\u00ce"
			+ "\u00d4\u00db\u00c4\u00cb\u00cf\u00d6\u00dc\u00c3\u00d5\u00c7";

	/**
	 * The clear text pattern 1.
	 */
	public final static String CLEAR_TEXT_PATTERN_1 = "[\\W&&[\\D&&[\\S&&[^+"
			+ HEX_REPRESENTATION + "-]]]]";

	/**
	 * The clear text pattern 2.
	 */
	public final static String CLEAR_TEXT_PATTERN_2 = "[\\W&&[\\D&&[\\S&&[^+\"()?*:~^"
			+ HEX_REPRESENTATION + "-]]]]";

	/**
	 * The &quot;o&quot; character.
	 */
	public static final String O_CHARACTER = "o";

	/**
	 * Patterns !\"#$%&'()*+,-./:;<=>?@[\\]^_`´{|}~
	 */
	public final static String PATTERN_SIGNS = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`´{|}~";

	/**
	 * Patterns !\"#$%&()*,./:;<=>?@[\\]^_`´{|}~
	 */
	public final static String PATTERN_SIGNS_2 = "!\"#$%&()*,./:;<=>?@[\\]^_`´{|}~";
	
	public static String schemaCharacter = "$";
	public static String schemaPattern = "\\$";

	private static final Set<String> STOP_WORDS = loadStopWords();

	/**
	 * Loads the list of stop words.
	 *
	 * @return the stop list.
	 */
	public static Set<String> loadStopWords() {
		final Set<String> stopWord = new HashSet<String>();
		stopWord.add("a");
		stopWord.add("abaixo");
		stopWord.add("about");
		stopWord.add("above");
		stopWord.add("abroad");
		stopWord.add("acaso");
		stopWord.add("acerca");
		stopWord.add("acima");
		stopWord.add("acha");
		stopWord.add("acho");
		stopWord.add("acola");
		stopWord.add("across");
		stopWord.add("ademais");
		stopWord.add("adentro");
		stopWord.add("adiante");
		stopWord.add("afim");
		stopWord.add("afin");
		stopWord.add("afins");
		stopWord.add("afora");
		stopWord.add("after");
		stopWord.add("against");
		stopWord.add("agora");
		stopWord.add("ahead");
		stopWord.add("ai");
		stopWord.add("ailleurs");
		stopWord.add("ainda");
		stopWord.add("aiansi");
		stopWord.add("alem");
		stopWord.add("algo");
		stopWord.add("alguem");
		stopWord.add("algum");
		stopWord.add("alguma");
		stopWord.add("algumas");
		stopWord.add("algunas");
		stopWord.add("algunos");
		stopWord.add("alguns");
		stopWord.add("ali");
		stopWord.add("alias");
		stopWord.add("all");
		stopWord.add("alli");
		stopWord.add("alo");
		stopWord.add("alone");
		stopWord.add("along");
		stopWord.add("alors");
		stopWord.add("also");
		stopWord.add("although");
		stopWord.add("always");
		stopWord.add("ambas");
		stopWord.add("ambito");
		stopWord.add("ambos");
		stopWord.add("among");
		stopWord.add("amongst");
		stopWord.add("amplo");
		stopWord.add("an");
		stopWord.add("and");
		stopWord.add("anex");
		stopWord.add("another");
		stopWord.add("ante");
		stopWord.add("antes");
		stopWord.add("anti");
		stopWord.add("any");
		stopWord.add("ao");
		stopWord.add("aonde");
		stopWord.add("aos");
		stopWord.add("apenas");
		stopWord.add("apesar");
		stopWord.add("apos");
		stopWord.add("apres");
		stopWord.add("aquela");
		stopWord.add("aquelas");
		stopWord.add("aquele");
		stopWord.add("aqueles");
		stopWord.add("aqui");
		stopWord.add("aquilo");
		stopWord.add("are");
		stopWord.add("as");
		stopWord.add("assim");
		stopWord.add("at");
		stopWord.add("ate");
		stopWord.add("ati");
		stopWord.add("atras");
		stopWord.add("atraves");
		stopWord.add("attendant");
		stopWord.add("atual");
		stopWord.add("aucun");
		stopWord.add("aucune");
		stopWord.add("auquel");
		stopWord.add("aussi");
		stopWord.add("aussitot");
		stopWord.add("autant");
		stopWord.add("autour");
		stopWord.add("auxquelles");
		stopWord.add("auxquels");
		stopWord.add("avante");
		stopWord.add("avec");
		stopWord.add("b");
		stopWord.add("back");
		stopWord.add("baixissima");
		stopWord.add("baixissimas");
		stopWord.add("baixissimo");
		stopWord.add("baixissimos");
		stopWord.add("balela");
		stopWord.add("barato");
		stopWord.add("baseada");
		stopWord.add("basicamente");
		stopWord.add("basta");
		stopWord.add("bastante");
		stopWord.add("be");
		stopWord.add("beaucoup");
		stopWord.add("because");
		stopWord.add("been");
		stopWord.add("before");
		stopWord.add("bem");
		stopWord.add("best");
		stopWord.add("better");
		stopWord.add("between");
		stopWord.add("beyond");
		stopWord.add("big");
		stopWord.add("both");
		stopWord.add("but");
		stopWord.add("by");
		stopWord.add("c");
		stopWord.add("ca");
		stopWord.add("cada");
		stopWord.add("capaz");
		stopWord.add("capazes");
		stopWord.add("caro");
		stopWord.add("caros");
		stopWord.add("caso");
		stopWord.add("casos");
		stopWord.add("cela");
		stopWord.add("celle");
		stopWord.add("celles");
		stopWord.add("celui");
		stopWord.add("cependant");
		stopWord.add("cerca");
		stopWord.add("certa");
		stopWord.add("certain");
		stopWord.add("certaine");
		stopWord.add("certaines");
		stopWord.add("certains");
		stopWord.add("certas");
		stopWord.add("certo");
		stopWord.add("certos");
		stopWord.add("ces");
		stopWord.add("cet");
		stopWord.add("cette");
		stopWord.add("ceux");
		stopWord.add("chacun");
		stopWord.add("chacune");
		stopWord.add("chaque");
		stopWord.add("chez");
		stopWord.add("chose");
		stopWord.add("cima");
		stopWord.add("coisa");
		stopWord.add("com");
		stopWord.add("combien");
		stopWord.add("comigo");
		stopWord.add("comme");
		stopWord.add("comment");
		stopWord.add("como");
		stopWord.add("comuns");
		stopWord.add("concernant");
		stopWord.add("conforme");
		stopWord.add("conformidade");
		stopWord.add("conosco");
		stopWord.add("conseguinte");
		stopWord.add("consequentemente");
		stopWord.add("consigo");
		stopWord.add("contida");
		stopWord.add("contidas");
		stopWord.add("contido");
		stopWord.add("contidos");
		stopWord.add("contigo");
		stopWord.add("contra");
		stopWord.add("contre");
		stopWord.add("contudo");
		stopWord.add("convosco");
		stopWord.add("corp");
		stopWord.add("could");
		stopWord.add("cuando");
		stopWord.add("cuja");
		stopWord.add("cujas");
		stopWord.add("cujo");
		stopWord.add("cujos");
		stopWord.add("d");
		stopWord.add("da");
		stopWord.add("dans");
		stopWord.add("daquela");
		stopWord.add("daquelas");
		stopWord.add("daquele");
		stopWord.add("daqueles");
		stopWord.add("daqui");
		stopWord.add("daquilodas");
		stopWord.add("das");
		stopWord.add("de");
		stopWord.add("debaixo");
		stopWord.add("dedans");
		stopWord.add("defronte");
		stopWord.add("dehors");
		stopWord.add("deja");
		stopWord.add("del");
		stopWord.add("dela");
		stopWord.add("delas");
		stopWord.add("dele");
		stopWord.add("deles");
		stopWord.add("della");
		stopWord.add("delle");
		stopWord.add("demais");
		stopWord.add("dentre");
		stopWord.add("depois");
		stopWord.add("depressa");
		stopWord.add("depuis");
		stopWord.add("des");
		stopWord.add("desde");
		stopWord.add("desquelles");
		stopWord.add("desquels");
		stopWord.add("dessa");
		stopWord.add("dessas");
		stopWord.add("desse");
		stopWord.add("desses");
		stopWord.add("dessus");
		stopWord.add("desta");
		stopWord.add("destas");
		stopWord.add("deste");
		stopWord.add("destes");
		stopWord.add("detras");
		stopWord.add("diante");
		stopWord.add("disso");
		stopWord.add("disto");
		stopWord.add("do");
		stopWord.add("donc");
		stopWord.add("donde");
		stopWord.add("donne");
		stopWord.add("dont");
		stopWord.add("doutra");
		stopWord.add("doutras");
		stopWord.add("doutro");
		stopWord.add("doutros");
		stopWord.add("dos");
		stopWord.add("du");
		stopWord.add("dum");
		stopWord.add("duma");
		stopWord.add("duns");
		stopWord.add("duquel");
		stopWord.add("duramente");
		stopWord.add("durant");
		stopWord.add("durante");
		stopWord.add("during");
		stopWord.add("e");
		stopWord.add("each");
		stopWord.add("easy");
		stopWord.add("either");
		stopWord.add("el");
		stopWord.add("ela");
		stopWord.add("elas");
		stopWord.add("ele");
		stopWord.add("eles");
		stopWord.add("ell");
		stopWord.add("ella");
		stopWord.add("elle");
		stopWord.add("elles");
		stopWord.add("ello");
		stopWord.add("em");
		stopWord.add("embaixo");
		stopWord.add("embora");
		stopWord.add("en");
		stopWord.add("encore");
		stopWord.add("enough");
		stopWord.add("enquanto");
		stopWord.add("entanto");
		stopWord.add("entao");
		stopWord.add("entre");
		stopWord.add("entretanto");
		stopWord.add("essa");
		stopWord.add("essas");
		stopWord.add("esse");
		stopWord.add("esses");
		stopWord.add("esta");
		stopWord.add("estas");
		stopWord.add("este");
		stopWord.add("estes");
		stopWord.add("et");
		stopWord.add("etaient");
		stopWord.add("etait");
		stopWord.add("etant");
		stopWord.add("etc");
		stopWord.add("eu");
		stopWord.add("eux");
		stopWord.add("ever");
		stopWord.add("every");
		stopWord.add("everybody");
		stopWord.add("everyone");
		stopWord.add("everything");
		stopWord.add("everywhere");
		stopWord.add("f");
		stopWord.add("facil");
		stopWord.add("favor");
		stopWord.add("few");
		stopWord.add("fim");
		stopWord.add("fin");
		stopWord.add("finali");
		stopWord.add("fins");
		stopWord.add("for");
		stopWord.add("fora");
		stopWord.add("forward");
		stopWord.add("from");
		stopWord.add("fulano");
		stopWord.add("furent");
		stopWord.add("g");
		stopWord.add("grace");
		stopWord.add("grandemente");
		stopWord.add("h");
		stopWord.add("had");
		stopWord.add("has");
		stopWord.add("have");
		stopWord.add("he");
		stopWord.add("hem");
		stopWord.add("her");
		stopWord.add("here");
		stopWord.add("hers");
		stopWord.add("herself");
		stopWord.add("him");
		stopWord.add("himself");
		stopWord.add("his");
		stopWord.add("hoje");
		stopWord.add("hormis");
		stopWord.add("hors");
		stopWord.add("how");
		stopWord.add("however");
		stopWord.add("hoy");
		stopWord.add("hum");
		stopWord.add("i");
		stopWord.add("ici");
		stopWord.add("if");
		stopWord.add("igual");
		stopWord.add("igualmente");
		stopWord.add("il");
		stopWord.add("ils");
		stopWord.add("in");
		stopWord.add("inc");
		stopWord.add("inter");
		stopWord.add("into");
		stopWord.add("is");
		stopWord.add("isso");
		stopWord.add("isto");
		stopWord.add("it");
		stopWord.add("item");
		stopWord.add("its");
		stopWord.add("itself");
		stopWord.add("iusque");
		stopWord.add("j");
		stopWord.add("ja");
		stopWord.add("jadis");
		stopWord.add("jamais");
		stopWord.add("je");
		stopWord.add("jeito");
		stopWord.add("juntamente");
		stopWord.add("junto");
		stopWord.add("juntos");
		stopWord.add("jusqu");
		stopWord.add("jusque");
		stopWord.add("just");
		stopWord.add("justa");
		stopWord.add("justo");
		stopWord.add("k");
		stopWord.add("l");
		stopWord.add("la");
		stopWord.add("lado");
		stopWord.add("lados");
		stopWord.add("laquelle");
		stopWord.add("las");
		stopWord.add("last");
		stopWord.add("le");
		stopWord.add("lequel");
		stopWord.add("les");
		stopWord.add("lesquelles");
		stopWord.add("lesquels");
		stopWord.add("less");
		stopWord.add("leur");
		stopWord.add("leurs");
		stopWord.add("lha");
		stopWord.add("lhas");
		stopWord.add("lhe");
		stopWord.add("lhes");
		stopWord.add("lho");
		stopWord.add("lhos");
		stopWord.add("lo");
		stopWord.add("lors");
		stopWord.add("lorsque");
		stopWord.add("los");
		stopWord.add("ltda");
		stopWord.add("lui");
		stopWord.add("m");
		stopWord.add("mais");
		stopWord.add("malgre");
		stopWord.add("maneira");
		stopWord.add("maneiras");
		stopWord.add("many");
		stopWord.add("mas");
		stopWord.add("me");
		stopWord.add("mediante");
		stopWord.add("meme");
		stopWord.add("memes");
		stopWord.add("menos");
		stopWord.add("mera");
		stopWord.add("meramente");
		stopWord.add("meras");
		stopWord.add("mero");
		stopWord.add("meros");
		stopWord.add("mes");
		stopWord.add("mesma");
		stopWord.add("mesmas");
		stopWord.add("mesmo");
		stopWord.add("mesmos");
		stopWord.add("meu");
		stopWord.add("meus");
		stopWord.add("mien");
		stopWord.add("mienne");
		stopWord.add("miennes");
		stopWord.add("miens");
		stopWord.add("mim");
		stopWord.add("minha");
		stopWord.add("minhas");
		stopWord.add("moins");
		stopWord.add("moment");
		stopWord.add("mon");
		stopWord.add("more");
		stopWord.add("most");
		stopWord.add("moyennant");
		stopWord.add("mr");
		stopWord.add("mrs");
		stopWord.add("my");
		stopWord.add("myself");
		stopWord.add("mz");
		stopWord.add("muita");
		stopWord.add("muitas");
		stopWord.add("muito");
		stopWord.add("muitos");
		stopWord.add("n");
		stopWord.add("na");
		stopWord.add("nada");
		stopWord.add("nao");
		stopWord.add("naquela");
		stopWord.add("naquelas");
		stopWord.add("naquele");
		stopWord.add("naqueles");
		stopWord.add("naquilo");
		stopWord.add("nas");
		stopWord.add("ne");
		stopWord.add("near");
		stopWord.add("neither");
		stopWord.add("nela");
		stopWord.add("nelas");
		stopWord.add("nele");
		stopWord.add("neles");
		stopWord.add("nenhum");
		stopWord.add("nenhuma");
		stopWord.add("nenhumas");
		stopWord.add("nenhuns");
		stopWord.add("nesse");
		stopWord.add("nesses");
		stopWord.add("nesta");
		stopWord.add("nestas");
		stopWord.add("neste");
		stopWord.add("nestes");
		stopWord.add("never");
		stopWord.add("ni");
		stopWord.add("ninguem");
		stopWord.add("nisso");
		stopWord.add("no");
		stopWord.add("non");
		stopWord.add("none");
		stopWord.add("nos");
		stopWord.add("nossa");
		stopWord.add("nossas");
		stopWord.add("nosso");
		stopWord.add("nossos");
		stopWord.add("not");
		stopWord.add("notamment");
		stopWord.add("notres");
		stopWord.add("nous");
		stopWord.add("now");
		stopWord.add("nulle");
		stopWord.add("nulles");
		stopWord.add("num");
		stopWord.add("numa");
		stopWord.add("numas");
		stopWord.add("nunca");
		stopWord.add("nuns");
		stopWord.add(O_CHARACTER);
		stopWord.add("of");
		stopWord.add("often");
		stopWord.add("oi");
		stopWord.add("ola");
		stopWord.add("on");
		stopWord.add("onde");
		stopWord.add("one");
		stopWord.add("only");
		stopWord.add("or");
		stopWord.add("os");
		stopWord.add("other");
		stopWord.add("ou");
		stopWord.add("our");
		stopWord.add("ourselves");
		stopWord.add("out");
		stopWord.add("outra");
		stopWord.add("outras");
		stopWord.add("outrem");
		stopWord.add("outro");
		stopWord.add("outros");
		stopWord.add("over");
		stopWord.add("p");
		stopWord.add("par");
		stopWord.add("para");
		stopWord.add("parce");
		stopWord.add("parmi");
		stopWord.add("pela");
		stopWord.add("pelas");
		stopWord.add("per");
		stopWord.add("perante");
		stopWord.add("perto");
		stopWord.add("plus");
		stopWord.add("plusieurs");
		stopWord.add("pode");
		stopWord.add("pois");
		stopWord.add("por");
		stopWord.add("poucos");
		stopWord.add("pour");
		stopWord.add("pourquoi");
		stopWord.add("pres");
		stopWord.add("proxima");
		stopWord.add("proximamente");
		stopWord.add("proximas");
		stopWord.add("proximos");
		stopWord.add("psiu");
		stopWord.add("puis");
		stopWord.add("puisque");
		stopWord.add("q");
		stopWord.add("quais");
		stopWord.add("quaisquer");
		stopWord.add("qual");
		stopWord.add("qualquer");
		stopWord.add("quand");
		stopWord.add("quando");
		stopWord.add("quant");
		stopWord.add("quanta");
		stopWord.add("quantas");
		stopWord.add("quanto");
		stopWord.add("quantos");
		stopWord.add("quase");
		stopWord.add("que");
		stopWord.add("quel");
		stopWord.add("quelle");
		stopWord.add("quelqu''un");
		stopWord.add("quelqu''une");
		stopWord.add("quelque");
		stopWord.add("quelques-unes");
		stopWord.add("quelques-uns");
		stopWord.add("quels");
		stopWord.add("quem");
		stopWord.add("quiconque");
		stopWord.add("quoi");
		stopWord.add("quoique");
		stopWord.add("r");
		stopWord.add("rather");
		stopWord.add("s");
		stopWord.add("sa");
		stopWord.add("sans");
		stopWord.add("sauf");
		stopWord.add("says");
		stopWord.add("se");
		stopWord.add("seguinte");
		stopWord.add("selon");
		stopWord.add("sem");
		stopWord.add("sempre");
		stopWord.add("senao");
		stopWord.add("sendo");
		stopWord.add("ses");
		stopWord.add("seu");
		stopWord.add("seus");
		stopWord.add("shall");
		stopWord.add("she");
		stopWord.add("should");
		stopWord.add("si");
		stopWord.add("sien");
		stopWord.add("sienne");
		stopWord.add("siennes");
		stopWord.add("siens");
		stopWord.add("sim");
		stopWord.add("simplesmente");
		stopWord.add("since");
		stopWord.add("sob");
		stopWord.add("sobre");
		stopWord.add("small");
		stopWord.add("soi");
		stopWord.add("soi-meme");
		stopWord.add("soit");
		stopWord.add("some");
		stopWord.add("somente");
		stopWord.add("sont");
		stopWord.add("soon");
		stopWord.add("sous");
		stopWord.add("still");
		stopWord.add("sua");
		stopWord.add("suas");
		stopWord.add("such");
		stopWord.add("suis");
		stopWord.add("t");
		stopWord.add("ta");
		stopWord.add("tal");
		stopWord.add("talvez");
		stopWord.add("tambem");
		stopWord.add("tampouco");
		stopWord.add("tandis");
		stopWord.add("tant");
		stopWord.add("tanta");
		stopWord.add("tantas");
		stopWord.add("tanto");
		stopWord.add("tantos");
		stopWord.add("te");
		stopWord.add("telle");
		stopWord.add("telles");
		stopWord.add("tem");
		stopWord.add("teremos");
		stopWord.add("tes");
		stopWord.add("teus");
		stopWord.add("than");
		stopWord.add("that");
		stopWord.add("the");
		stopWord.add("their");
		stopWord.add("themselves");
		stopWord.add("then");
		stopWord.add("there");
		stopWord.add("these");
		stopWord.add("they");
		stopWord.add("thing");
		stopWord.add("this");
		stopWord.add("those");
		stopWord.add("though");
		stopWord.add("through");
		stopWord.add("tienne");
		stopWord.add("tiennes");
		stopWord.add("tiens");
		stopWord.add("toda");
		stopWord.add("todas");
		stopWord.add("todavia");
		stopWord.add("today");
		stopWord.add("todo");
		stopWord.add("todos");
		stopWord.add("toi");
		stopWord.add("tomara");
		stopWord.add("ton");
		stopWord.add("to");
		stopWord.add("too");
		stopWord.add("toujours");
		stopWord.add("tous");
		stopWord.add("toute");
		stopWord.add("toutes");
		stopWord.add("tranquila");
		stopWord.add("tranquilamente");
		stopWord.add("tranquilas");
		stopWord.add("tranquilo");
		stopWord.add("tranquilos");
		stopWord.add("tras");
		stopWord.add("tres");
		stopWord.add("trop");
		stopWord.add("tu");
		stopWord.add("tua");
		stopWord.add("tuas");
		stopWord.add("tudo");
		stopWord.add("u");
		stopWord.add("ulterior");
		stopWord.add("um");
		stopWord.add("uma");
		stopWord.add("umas");
		stopWord.add("un");
		stopWord.add("una");
		stopWord.add("under");
		stopWord.add("uno");
		stopWord.add("uns");
		stopWord.add("until");
		stopWord.add("up");
		stopWord.add("upon");
		stopWord.add("upres");
		stopWord.add("v");
		stopWord.add("vai");
		stopWord.add("varia");
		stopWord.add("varias");
		stopWord.add("vario");
		stopWord.add("varios");
		stopWord.add("vem");
		stopWord.add("very");
		stopWord.add("vez");
		stopWord.add("vezes");
		stopWord.add("voce");
		stopWord.add("voces");
		stopWord.add("vos");
		stopWord.add("vossa");
		stopWord.add("vossas");
		stopWord.add("vosso");
		stopWord.add("vossos");
		stopWord.add("votre");
		stopWord.add("votres");
		stopWord.add("vous");
		stopWord.add("vu");
		stopWord.add("vide");
		stopWord.add("w");
		stopWord.add("was");
		stopWord.add("we");
		stopWord.add("were");
		stopWord.add("what");
		stopWord.add("when");
		stopWord.add("where");
		stopWord.add("which");
		stopWord.add("while");
		stopWord.add("who");
		stopWord.add("whom");
		stopWord.add("whose");
		stopWord.add("will");
		stopWord.add("with");
		stopWord.add("within");
		stopWord.add("without");
		stopWord.add("would");
		stopWord.add("www");
		stopWord.add("x");
		stopWord.add("y");
		stopWord.add("yet");
		stopWord.add("you");
		stopWord.add("your");
		stopWord.add("yours");
		stopWord.add("yourself");
		stopWord.add("yourselves");
		stopWord.add("z");
		stopWord.add("us");
		stopWord.add("ours");
		stopWord.add("them");
		stopWord.add("theirs");
		stopWord.add("am");
		stopWord.add("being");
		stopWord.add("having");
		stopWord.add("does");
		stopWord.add("did");
		stopWord.add("doing");
		stopWord.add("can");
		stopWord.add("may");
		stopWord.add("might");
		stopWord.add("must");
		stopWord.add("ought");
		stopWord.add("below");
		stopWord.add("down");
		stopWord.add("off");
		stopWord.add("again");
		stopWord.add("further");
		stopWord.add("once");
		stopWord.add("why");
		stopWord.add("nor");
		stopWord.add("own");
		stopWord.add("same");
		stopWord.add("so");
		stopWord.add("least");
		stopWord.add("say");
		stopWord.add("said");
		stopWord.add("get");
		stopWord.add("go");
		stopWord.add("goes");
		stopWord.add("made");
		stopWord.add("make");
		stopWord.add("put");
		stopWord.add("see");
		stopWord.add("seen");
		stopWord.add("whether");
		stopWord.add("like");
		stopWord.add("well");
		stopWord.add("even");
		stopWord.add("way");
		stopWord.add("take");
		stopWord.add("two");
		stopWord.add("three");
		stopWord.add("four");
		stopWord.add("five");
		stopWord.add("first");
		stopWord.add("second");
		stopWord.add("new");
		stopWord.add("old");
		stopWord.add("high");
		stopWord.add("long");
		return stopWord;
	}

	/**
	 * Returns true if the content parameter has content, otherwise false. 
	 * @param content content to be analyzed.
	 * @return true if the content parameter has content, otherwise false. 
	 */
	public static boolean hasContent(final String content) {
		if ((content != null) && (!"".equalsIgnoreCase(content.trim())))
			return true;
		return false;
	}
	
	
	/**
	 * Clears the informed content wiping out all different characters from
	 * letters and numbers. It uses the default pattern to clear the content.
	 *
	 * @param content
	 *            content to be cleared.
	 * @return the cleaned text.
	 * @see Util#CLEAR_TEXT_PATTERN_1
	 * @throws Exception
	 *             unexpected error.
	 */
	public static String clearText(final String content) throws Exception {
		return Util.clearText(content, CLEAR_TEXT_PATTERN_1, true, true);
	}

	/**
	 * Clears the informed content wiping out all different characters from
	 * letters and numbers. It uses the default pattern to clear the content.
	 *
	 * @param content
	 *            content to be cleared.
	 * @param lowerCase
	 *            whether return must be set up to lower case or not.
	 * @return the cleaned text.
	 * @see Util#CLEAR_TEXT_PATTERN_1
	 * @throws Exception
	 *             unexpected error.
	 */
	public static String clearText(final String content, final boolean lowerCase)
			throws Exception {
		return Util.clearText(content, CLEAR_TEXT_PATTERN_1, lowerCase, true);
	}

	/**
	 * Clears the informed content wiping out all different characters from
	 * letters and numbers. It uses the default pattern to clear the content.
	 *
	 * @param content
	 *            content to be cleared.
	 * @param lowerCase
	 *            whether return must be set up to lower case or not.
	 * @param trim
	 *            removes spaces at the end of the string.
	 * @return the cleaned text.
	 * @see Util#CLEAR_TEXT_PATTERN_1
	 * @throws Exception
	 *             unexpected error.
	 */
	public static String clearText(final String content,
			final boolean lowerCase, final boolean trim) throws Exception {
		return Util.clearText(content, CLEAR_TEXT_PATTERN_1, lowerCase, trim);
	}

	/**
	 * Clears the informed content wiping out all different characters from
	 * letters and numbers. Basic patterns can be accessed through
	 * Util.CLEAR_TEXT_PATTERN_1 and Util.CLEAR_TEXT_PATTERN_2. The second
	 * pattern does not clean the character '"'.
	 *
	 * @param content
	 *            content to be cleared.
	 * @param pattern
	 *            pattern to be used to clear the text.
	 * @param lowerCase
	 *            whether return must be set up to lower case or not.
	 * @param trim
	 *            whether trim() must be applied on the return content.
	 * @return the cleaned text.
	 * @throws Exception
	 *             unexpected error.
	 */
	public static String clearText(final String content, final String pattern,
			final boolean lowerCase, final boolean trim) throws Exception {
		if ((content != null) && (!content.equalsIgnoreCase("")))
			return clearQuery(content, pattern, lowerCase, trim).replaceAll(
					"-", BLANK_SPACE);
		return "";
	}
	
	/**
	 * Clears the informed content wiping out all different characters from
	 * letters and numbers. It uses the query pattern to clear the content.
	 *
	 * @param content
	 *            a query to be cleared.
	 * @return the cleaned query.
	 * @see Util#CLEAR_TEXT_PATTERN_2
	 * @throws Exception
	 */
	public static String clearQuery(final String content) throws Exception {
		return Util.clearQuery(content, CLEAR_TEXT_PATTERN_2);
	}
	
	/**
	 * Clears the informed content wiping out all different characters from
	 * letters and numbers. Basic patterns can be accessed through
	 * Util.CLEAR_TEXT_PATTERN_1 and Util.CLEAR_TEXT_PATTERN_2. The second
	 * pattern does not clean characters '+~^\"()?*-'.
	 *
	 * @param content
	 *            content to be cleared.
	 * @param pattern
	 *            pattern to be used to clear the text.
	 * @return the cleaned text.
	 * @throws Exception
	 *             unexpected error.
	 */
	public static String clearQuery(final String content, final String pattern)
			throws Exception {
		if ((content != null) && (!content.equalsIgnoreCase("")))
			return clearQuery(content, pattern, true, true);
		return "";
	}
	
	/**
	 * Clears the informed content wiping out all charactes different from
	 * letters and numbers. Basic patterns can be accessed through
	 * Util.CLEAR_TEXT_PATTERN_1 and Util.CLEAR_TEXT_PATTERN_2. The second
	 * pattern does not clean characters '+\"()?*-'.
	 *
	 * @param content
	 *            content to be cleared.
	 * @param pattern
	 *            pattern to be used to clear the text.
	 * @param lowerCase
	 *            whether return must be set up to lower case or not.
	 * @return the cleaned text.
	 * @throws Exception
	 *             unexpected error.
	 */
	public static String clearQuery(final String content, final String pattern,
			final boolean lowerCase, final boolean trim) throws Exception {
		if ((content != null) && (!content.equalsIgnoreCase(""))) {
			final Pattern ptrLExpressao = Pattern.compile(pattern);
			String output = removeAccent((ptrLExpressao.matcher(content
					.replaceAll("\n", " ").replaceAll("[\\.[\\,]]", " ")))
					.replaceAll(BLANK_SPACE).replaceAll("_", BLANK_SPACE));
			if (lowerCase && trim) {
				return output.toLowerCase().trim();
			} else if (lowerCase) {
				return output.toLowerCase();
			} else {
				return output;
			}
		}
		return "";
	}
	
	/**
	 * Clears the string content modifying accented character.
	 * http://www.columbia.edu/kermit/utf8-t1.html
	 *
	 * @param content
	 *            content to be changed.
	 * @return the string without accent.
	 */
	public static String removeAccent(final String content) {
		final char[] aryLAcento = "\u00E1\u00C1\u00E3\u00C3\u00E2\u00C2\u00E0\u00C0\u00E4\u00C4\u00E9\u00C9\u00EA\u00CA\u00E8\u00C8\u00EB\u00CB\u00ED\u00CD\u00EF\u00CF\u00EC\u00CC\u00EE\u00CE\u00F3\u00D3\u00F5\u00D5\u00F4\u00D4\u00F2\u00D2\u00F6\u00D6\u00FA\u00DA\u00FB\u00DB\u00F9\u00D9\u00FC\u00DC\u00E7\u00C7\u00FF\u0178\u00FD\u00DD\u00F1\u00D1"
				.toCharArray();
		final char[] aryLSAcento = "aAaAaAaAaAeEeEeEeEiIiIiIiIoOoOoOoOoOuUuUuUuUcCyYyYnN"
				.toCharArray();
		final char[] aryLConteudo = content.toCharArray();
		final StringBuffer stbLRetorno = new StringBuffer();
		char chrLCarc;
		for (int intLIdx = 0; intLIdx < aryLConteudo.length; intLIdx++) {
			chrLCarc = aryLConteudo[intLIdx];
			for (int intLAcento = 0; intLAcento < aryLAcento.length; intLAcento++) {
				if (chrLCarc == aryLAcento[intLAcento]) {
					chrLCarc = aryLSAcento[intLAcento];
					break;
				}
			}
			stbLRetorno.append(chrLCarc);
		}
		return stbLRetorno.toString();
	}
	
	/**
	 * It receives an string content and creates its stem form, removing blank spaces and all characters 
	 * different from letters and numbers.
	 *  
	 * @param value
	 * @return the stemmed content
	 * @throws Exception
	 */
	public static String generateStemKey(String value) throws Exception {
		String newWord = value.replaceAll("[\\-[\\+]]", " ");
		String derivatedWord = Util.clearText(
				Stemmer.mstem(newWord)).replaceAll(" ", "").toLowerCase();
		if ((derivatedWord != null) && (!"".equalsIgnoreCase(derivatedWord.trim())))
			return derivatedWord.trim();
		else return value;
	}	
	
	/**
	 * Checks whether the informed content is a stop word.
	 *
	 * @param word
	 *            the content to be checked.
	 * @return whether the parameter is or not a stop word.
	 * @throws Exception
	 *             unexpected error.
	 */
	public static boolean isStopWord(final String word) throws Exception {
		// if (STOP_WORDS == null)
		// STOP_WORDS = loadStopWords();
		return STOP_WORDS.contains(Util.removeAccent(word
				.trim().toLowerCase()));
	}
	
	
	
}
